package com.blumov.fastbox.application.services.compra;

import com.blumov.fastbox.domain.model.compra.ItemPedido;
import com.blumov.fastbox.domain.model.compra.Pedido;
import com.blumov.fastbox.domain.model.compra.PedidoId;



/**
 * Servicios para la entidad {@link Pedido}.
 */
public interface PedidoService {

	PedidoId crear();

	void agregarItem(final PedidoId pedidoId, final ItemPedido itemPedido);

	void agregarBandeja(final PedidoId pedidoId);

	void seleccionarBandejaAnterior(final PedidoId pedidoId);

	void seleccionarBandejaSiguiente(final PedidoId pedidoId);

	Integer cantidadDeBandejas(final PedidoId pedidoId);
	
	Integer indiceBandejaActiva(final PedidoId pedidoId);
	
	void cocinar(PedidoId pedidoId);
	
	void enviarACocina(PedidoId pedidoId);
	
	void pedidoListo(PedidoId pedidoId);
	
	/**
	 * Una vez que el pedido se entrego, se modifica su
	 * estado en la base de datos para que cuando la terminal
	 * publica lo consulte no lo muentre. (seria la opcion
	 * de terminacion del pedido).
	 * @param pedido
	 */
	void confirmarPedidoEntregado(PedidoId pedidoId);
	
	/**
	 * Se cambia el estado del pedido a cancelado.
	 * @param pedido
	 */
	void pedidoCancelado(PedidoId pedidoId);
	
	/**
	 * Busca el siguiente pedido para ser enviado al
	 * dispatcher.
	 * @return
	 */
	Pedido damePedido();
}
